package com.fjbdxk.beidou.msg;

import com.fjbdxk.beidou.core.AbstractBeiDouMessage;
import com.fjbdxk.beidou.core.ByteUtils;
import com.fjbdxk.beidou.core.MsgFlagEnum;
import com.fjbdxk.beidou.core.MsgTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.Setter;

import java.io.UnsupportedEncodingException;

/**
 * @author huanggy
 * @version 1.0.0
 * @date 2024/05/13
 **/
@Setter
@Getter
@RequiredArgsConstructor
public class CCTCQMessage extends AbstractBeiDouMessage {

    /**
     * 收信方ID
     */
    @NonNull
    private int targetId;

    /**
     * 频点：1-5对应Lf0-Lf4
     */
    private int lfLevel = 2;
    /**
     * 入站确认申请：1不需要，2需要
     */
    private int needCheck = 1;
    /**
     * 编码类别：1汉字，2代码，3混编，4压缩汉字，5压缩代码
     */
    private int encodeType = 3;
    /**
     * 通信数据<br/>
     * 1.编码类别为“1”时，传输内容为计算机 内码
     * 每个汉字16bit,高位在前；
     * 2.编码类别为“2”时,传输内容为ASCII 码字
     * 符，如代码8以ASCII码字符'8' (HEX38)
     * 表示；
     * 3.当编码类别为“3”时，传输内容为汉字 代码
     * 混合，输出的BCD码起始位“A4” ；
     */
    @NonNull
    private String content;
    /**
     * 通信频度：0为单次
     */
    private int connectType = 0;


    @Override
    public String getType() {
        return MsgFlagEnum.CC.name() + MsgTypeEnum.TCQ.name();
    }

    /**
     * 数据类型：{x.x},{x},{x.x},{x},{x},{x},{c-c},{x.x}
     *将多个相关字段的值组合成一个格式化的字符串，方便后续的处理或传输,生成传输格式
     * @return
     */
    public String getData() {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(targetId).append(SPLIT_CHAR);
        stringBuilder.append(lfLevel).append(SPLIT_CHAR);
        stringBuilder.append(needCheck).append(SPLIT_CHAR);
        stringBuilder.append(encodeType).append(SPLIT_CHAR);
        // 当编码类别为“3”时，传输内容为汉字 代码混合，输出的BCD码起始位“A4”
        if (3 == encodeType) {
            stringBuilder.append("A4");
        }
        //byte[] contentBytes;
        // contentBytes = content.getBytes("GBK");
        //contentBytes = content;
        //stringBuilder.append(ByteUtils.toHexString(contentBytes).toUpperCase()).append(SPLIT_CHAR);
        stringBuilder.append(content).append(SPLIT_CHAR);
        stringBuilder.append(connectType);
        return stringBuilder.toString();
    }

}
